package com.yilin.tms.system.controller;

import com.yilin.commons.util.StringUtil;
import com.yilin.tms.core.application.ReturnData;
import com.yilin.tms.core.commons.base.BaseController;
import com.yilin.tms.core.commons.annotation.SkipLoginVerify;
import com.yilin.tms.core.entity.system.system.FunctionApi;
import com.yilin.tms.system.service.IFunctionApiService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;

/**
 * 功能API管理
 */
@RestController
@RequestMapping("/system/functionApi/")
public class FunctionApiController extends BaseController {

    @Resource
    IFunctionApiService functionApiService;

    /**
     * 获取节点List
     */
    @PostMapping("getAllFunctionApiList")
    public ReturnData<List<FunctionApi>> getAllFunctionApiList(FunctionApi query) {
        List<FunctionApi> functionApiList = functionApiService.getFunctionApiList(query);
        return jsonView(true, "获取列表成功", functionApiList);
    }

    /**
     * 通过IDS集合获取功能集合
     * */
    @PostMapping("getFunctionApiListByCodes")
    @SkipLoginVerify
    public ReturnData<List<FunctionApi>> getFunctionApiListByCodes(String[] apiCodes) {
        if (apiCodes == null) return jsonView(false, "请提供要查询的功能节点CODE集");
        List<FunctionApi> apiList = functionApiService.getFunctionApiListByCodes(apiCodes);
        apiList.sort(Comparator.comparingInt(FunctionApi::getSoft));
        return jsonView(true, "获取成功",apiList);
    }

    /**
     * 添加API节点
     */
    @PostMapping("saveFunctionApi")
    public ReturnData<Object> saveFunctionApi(FunctionApi functionApi) {
        if (functionApi.getLayer() == null) {
            return jsonView(false, "未指定节点层级");
        }
        if (StringUtil.isEmpty(functionApi.getName())){
            return jsonView(false, "请填写节点名称");
        }
        if (functionApi.getApiType() == null) {
            return jsonView(false, "未指定节点类型");
        }
        if (functionApi.getLayer()!=0 && functionApi.getParentId()==null){
            return jsonView(false, "请指定节点上级");
        }
        if (functionApi.getApiType() != FunctionApi.ApiType.catalogue && StringUtil.isEmpty(functionApi.getCode())) {
            return jsonView(false, "请指定API代码");
        }
        if (functionApi.getApiType() != FunctionApi.ApiType.catalogue && StringUtil.isEmpty(functionApi.getTargetUserTypes())){
            return jsonView(false, "请至少标记一个归类用户类型");
        }
        functionApiService.saveFunctionApi(functionApi);
        return jsonView(true, "保存成功");
    }

    /**
     * 删除API节点
     */
    @PostMapping("removeFunctionApi")
    public ReturnData<Object> removeFunctionApi(FunctionApi functionApi) {
        if (functionApi.getId() == null) {
            return jsonView(false, "未指定节点");
        }
        List<FunctionApi> childList = functionApiService.getFunctionApiByParentId(functionApi.getId());
        if (childList.size() > 0){
            return jsonView(false, "节点下存在子节点，请先删除子节点");
        }
        functionApiService.removeById(functionApi);
        return jsonView(true, "删除成功");
    }

}
